package com.windea.study.kotlin.android.incremental

import android.app.*
import android.content.*
import android.net.*
import android.os.*
import android.view.*
import com.google.android.material.snackbar.Snackbar
import androidx.appcompat.app.AppCompatActivity;
import android.widget.*
import com.itheima.updatelib.*
import com.windea.study.kotlin.android.incremental.R.layout.*
import kotlinx.android.synthetic.main.activity_main.*
import org.jetbrains.anko.*
import org.jetbrains.anko.sdk27.coroutines.*
import java.io.*

class MainActivity : AppCompatActivity() {
	//使用懒加载的方式初始化
	//private val mDialog: ProgressDialog by lazy { ProgressDialog(this) }
	private val progressBar: ProgressBar by lazy { ProgressBar(this) }
	
	override fun onCreate(savedInstanceState: Bundle?) {
		super.onCreate(savedInstanceState)
		setContentView(activity_main)
		
		//查找到视图后，设置点击监听
		btn_update.onClick {
			update()
		}
	}
	
	//增量更新：旧版本+patch=合并生成新版本的apk
	private fun update() {
		//通过命令行获得当前设备运行项目的包名
		//adb shell dumpsys window w |findstr \/ |findstr name=
		val appInfo = packageManager.getApplicationInfo("com.ss.android.article.news", 0)
		//得到旧版本的apk路径
		val oldPath = appInfo.sourceDir
		//指定patch文件保存的路径
		//val patchFile = File(Environment.getExternalStorageDirectory(),"toutiao.patch")
		val patchFile = File(getExternalFilesDir(null), "toutiao.patch")
		
		//NOTE 需要在manifest中添加读写外部存储的权限
		
		//设置新版本apk保存路径
		val newApkFile = File(getExternalFilesDir(null), "toutiao.new.apk")
		
		//CITE 手动生成增量更新so库教程：https://github.com/jiyouliang2/SmartUpdateLib，需要jni的知识点
		//CITE 已集成的库：https://github.com/jiyouliang2/SmartUpdateDemo
		
		//合并生成新版本apk
		//mDialog.show()
		progressBar.visibility = View.VISIBLE
		
		//子线程
		doAsync {
			//参数：旧版本路径，新apk路径，patch路径
			val result = PatchUtil.patch(oldPath, newApkFile.absolutePath, patchFile.absolutePath)
			
			//如果合并成功
			if(result == 0) {
				runOnUiThread {
					//mDialog.dismiss()
					progressBar.visibility = View.INVISIBLE
					//安装新版本的apk
					val intent = Intent().apply {
					//设置action、数据：查询系统代码，意图过滤（在清单文件）
						action = "android.intent.action.VIEW"
						categories += "android.intent.category.Default"
						setDataAndType(Uri.parse("file://${newApkFile.absolutePath}"), "application.vnd.android.package-archive")
					}
					startActivity(intent)
				}
			}
		}
	}
}
